package view;

import com.wedu.entity.Job;
import com.wedu.entity.User;
import com.wedu.service.UserService;
import com.wedu.util.TSUtility;


import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class Manager_menu {
    private static Scanner sc = new Scanner(System.in);

    static void manager_menu(User user, UserService userService) {
        System.out.println("**************************");
        System.out.println("***                    ***");
        System.out.println("***   欢迎" + user.getName() + "管理员   ***");
        System.out.println("***                    ***");
        System.out.println("**************************");
        System.out.println("\t\t1.基本信息维护\n\t\t2.兼职信息审批\n\t\t3.系统管理\n\t\t4.退出登录\n\t\t5.退出系统");
        System.out.print("请输入你的选择：");
        while (true) {
            char c = TSUtility.readMenuSelectionPro1();
            switch (c) {
                case '1':
                    //基本信息维护
                    messageMaintain(userService);
                    break;
                case '2':
                    //兼职信息审批
                    approval_information(userService);
                    break;
                case '3':
                    //系统管理
                    system_management(userService, user);
                    break;
                case '4':
                    TSUtility.loadSpecialEffects();
                    System.out.println("退出成功！");
                    return;
                case '5':
                    System.out.print("你确定要退出系统吗？请输入（Y/N）：");

                    char a = TSUtility.readConfirmSelection();
                    TSUtility.loadSpecialEffects();
                    if (a == 'Y' || a == 'y') {
                        System.out.println("退出成功！欢迎下次使用！");
                        System.exit(0);
                    } else {
                        System.out.println("\t\t1.基本信息维护\n\t\t2.兼职信息审批\n\t\t3.系统管理\n\t\t4.退出登录\n\t\t5.退出系统");
                        System.out.print("请输入你的选择：");
                        break;
                    }
            }
        }
    }

    //基本信息维护
    static void messageMaintain(UserService userService) {
        System.out.println("...........基本信息维护............");
        while (true) {
            System.out.println("\t\t1.查看所有已审核通过的兼职信息\n\t\t2.职位等级设置\n\t\t3.兼职类型设置");
            System.out.println("\t\t4.兼职人员信誉度调整  \n\t\t5.逾期费用扣除比例调整" +
                    "\n\t\t6.兼职信息删除\n\t\t7.返回上一级目录");
            System.out.print(".....请输入你的选择：");
            char c = TSUtility.readMenuSelectionPro();
            switch (c) {
                case '1':
                    //查看所有已审核通过的兼职信息
                    look_over(userService);
                    break;
                case '2':
                    //职位等级设置
                    PALM(userService);
                    break;
                case '3':
                    //兼职类型设置
                    types(userService);
                    break;
                case '4':
                    //用户信誉度调整
                    credibility(userService);
                    break;
                case '5':
                    //逾期费用扣除比例调整
                    overdue_cost(userService);
                    break;
                case '6':
                    //兼职信息删除
                    job_deletion(userService);
                    break;
                case '7':
                    System.out.println("\n\t\t1.基本信息维护\n\t\t2.兼职信息审批\n\t\t3.系统管理\n\t\t4.退出登录\n\t\t5.退出系统");
                    System.out.print("请输入你的选择：");
                    return;
            }
        }
    }

    //查看所有已审核通过的兼职信息
    public static void look_over(UserService userService){
        System.out.println("++++++++++++查看已通过审核（现有职位）的兼职信息+++++++++++");
        List<Job> jobs = userService.look_over();
        if (jobs.size()==0){
            System.out.println("暂无已通过审核的兼职信息！\n");
            return;
        }
        DY(jobs);
        System.out.println("--------------------------------------------------------------------------------------------------------------------------------------");
    }

    //职位等级设置
    private static void PALM(UserService userService){
        System.out.println("----------兼职等级修改----------");
        int did=TSUtility.did();
        int in=2;
        boolean b = userService.handle_did(did, in);
        if (!b) {
            System.out.println("你输入的兼职信息编号不存在！");
            return;
        }
        Job job = userService.didG(did);
        System.out.println("职位信息编号："+job.getDID()+"公司名称："+job.getCompany_name()+"公司编号："+job.getJID()+"发布兼职人员ID："+job.getAcid()+"职位等级："+job.getJob_level());
        System.out.print("以下信息可以不填，不填时未修改！\n请输入新的职位等级（1-5级）：");
        int job_level;
        for (;;) {
            try {
                String str = sc.nextLine();
                if (str.equals("")) {
                    System.out.println("兼职等级未修改！");
                    return;
                }
                job_level = Integer.parseInt(str);
                if (job_level < 1 || job_level > 5)
                    System.out.println("请按要求修改信息！请重新输入：");
                else break;
            } catch (Exception e) {
                System.out.println("请按要求修改信息！请重新输入：");
            }
        }
        userService.job_level(did,job_level);
        System.out.println("兼职等级修改成功！");
    }

    //兼职类型设置
    private static void types(UserService userService){
        System.out.println("----------兼职类型修改----------");
        int did=TSUtility.did();
        int in=2;
        boolean b = userService.handle_did(did, in);
        if (!b) {
            System.out.println("你输入兼职信息编号不存在!");
            return;
        }
        Job job = userService.didG(did);
        System.out.println("职位信息编号："+job.getDID()+"公司名称："+job.getCompany_name()+"公司编号："+job.getJID()+"发布兼职人员ID："+job.getAcid()+"职位类型："+job.getJobType_name());
        System.out.print("以下信息可以不填，不填时未修改！\n请输入新的职位类型：");
        String jobType_name=sc.nextLine();
        if (jobType_name.equals("")){
            System.out.println("兼职类型为修改！");
            return;
        }
        userService.jobType_name(did,jobType_name);
        System.out.println("修改成功！");
    }

    public static void DY(List<Job> jobs){
        System.out.println("兼职信息编号\t公司名称\t公司编号\t发布兼职人员ID 兼职类型 职位名称 职位等级 工资（元/小时） 需求人数\t工作开始时间\t\t结束时间\t逾期扣费比例\t职位审核状态\t职位工作状态\t工作描述");
        for (Job job:jobs){
            String str = "";
            if (job.getApproval_status() == 2)
                str = "管理员审核通过！";
            String str1="";
            if (!job.getStare().equals("true"))
                str1 = "未开始";
            else str1="进行中";
            System.out.println(job.getDID() + "\t  " + job.getCompany_name() + "\t" + job.getJID() + "\t"+job.getAcid() + job.getJobType_name() + "\t " + job.getJob_name() +
                    "\t\t" + job.getJob_level() + "\t\t" + job.getSalary() + "\t\t" + job.getDemand() + "\t\t" + job.getJob_time() + " " + job.getJob1_time() + "  "
                    + job.getDeduct_salary() + "\t" + str + str1 + "\t" + job.getJob_content());
        }
    }

    //用户信誉度调整
    private static void credibility(UserService userService) {
        System.out.println("\n+++++++++++用户信誉度调整++++++++++++");
        System.out.println("信誉度调整规则：兼职等级梯度为零至五级，五级最高，零级最低，\n管理员最高可修改为五级，最低可修改为一级，零级时不可修改！");
        System.out.print("请输入兼职人员学号（教师编号）或用户编号：");
        String id = sc.next();
        boolean flag = userService.name_t(id);
        if (!flag) {
            System.out.println("你输入的账号不存在！\n");
            return;
        }
        User user = userService.id(id);
        System.out.println("用户编号：" + user.getACID() + " 学号（教师编号）：" + user.getUid() + " 姓名：" + user.getName() + " 信誉等级：" + user.getCredit_rating());
        if (!user.getACID().startsWith("1")) {
            System.out.println("该用户不是兼职人员，信誉度不需调整！\n");
            return;
        }
        if (user.getCredit_rating() == 0) {
            System.out.println("还兼职人员信誉等级为0级，已列入黑名单不可正在修改！\n");
            return;
        }
        int level = 0;
        for (; ; ) {
            System.out.print("请输入修改后的信誉等级（可不填，不填时未修改）：");
            String s = sc.next();
            if (s.equals(""))
                break;
            try {
                level = Integer.parseInt(s);
                if (level < 1 || level > 5) {
                    System.out.println("请按规定修改用户等级！");
                } else break;
            } catch (Exception e) {
                System.out.println("请正确输入用户等级！");
            }
        }
        if (level == 0) {
            System.out.println("该兼职人员信誉等级未修改！\n");
            return;
        }
        System.out.print("你确定修改该兼职人员的信誉度吗？请输入（Y|N）：");
        char c = TSUtility.readConfirmSelection();
        TSUtility.loadSpecialEffects();
        if (c == 'Y' || c == 'y') {
            boolean b = userService.level(user.getACID(), level);
            if (b) {
                System.out.println("修改成功！\n");

            } else {
                System.out.println("修改失败！\n");
            }
        } else {
            System.out.println("你选择了NO，该兼职人员信誉度未修改！\n");
            //回车继续
            TSUtility.readReturn();
        }
    }

    //逾期扣费比列调整
    private static void overdue_cost(UserService userService){
        System.out.println("------------逾期扣费比列调整-----------");
        int did=TSUtility.did();
        int in=2;
        boolean b = userService.handle_did(did, in);
        if (!b) {
            System.out.println("你输入兼职信息编号不存在!");
            return;
        }
        Job job = userService.didG(did);
        System.out.println("职位信息编号："+job.getDID()+"公司名称："+job.getCompany_name()+"公司编号："+job.getJID()+"发布兼职人员ID："+job.getAcid()+"逾期扣费比列："+job.getDeduct_salary());
        System.out.print("以下信息可以不填，不填时未修改！\n请输入新的扣费比列：");
        double deduct_salary;
        for (;;){
            String str=sc.nextLine();
            if (str.equals("")){
                System.out.println("逾期扣费比列未修改！");
                return;
            }
            try {
                deduct_salary=Double.parseDouble(str);
                break;
            }catch (Exception e){
                System.out.println("请安要求输入扣费比列！请重新输入：");
            }
        }
        userService.deduct_salary(did,deduct_salary);
        System.out.println("逾期扣费比列修改成功！\n");
    }

    //兼职信息删除
    private static void job_deletion(UserService userService){
        System.out.println("++++++++++现有兼职信息删除+++++++++++");
        System.out.println("\t提示：可以删除所有的已通过审批的兼职信息，正在进行中的兼职信息删除与发布兼职人员" +
                "\n一样，删除时自动计算工资！");
        int did=TSUtility.did();
        int in=2;
        boolean b = userService.handle_did(did, in);
        if (!b) {
            System.out.println("你输入兼职信息编号不存在!");
            return;
        }
        Job job = userService.didG(did);
        List<Job> jobs=new ArrayList<Job>();
        jobs.add(job);
        DY(jobs);
        System.out.print("你确定要删除兼职信息吗？请输入（Y/N）：");
        char a=TSUtility.readConfirmSelection();
        TSUtility.loadSpecialEffects();
        if (a=='Y'||a=='y'){
            Post_part_time_staff.revoke_t(job,userService,did);
            System.out.println("兼职信息删除成功！");
        }else
            System.out.println("你选择了NO，兼职信息未撤销！");
    }

    //兼职信息审批
    private static void approval_information(UserService userService){
        System.out.println("+++++++++++++兼职信息审批+++++++++++++");
        while (true) {
            System.out.println("1.查看兼职信息待审批兼职信息" +
                    "\n2.处理待审批兼职信息+\n3.返回上一级目录");
            System.out.print("请输入你的选择：");
            char c = TSUtility.readMenuSelectionPro1();
            switch (c) {
                case '1':
                    //查看兼职信息待审批兼职信息
                    examine(userService);
                    break;
                case '2':
                    //处理待审批兼职信息
                    handle(userService);
                    break;
                case '3':
                    System.out.println("\t\t1.基本信息维护\n\t\t2.兼职信息审批\n\t\t3.系统管理\n\t\t4.退出登录\n\t\t5.退出系统");
                    System.out.print("请输入你的选择：");
                    return;
            }
        }
    }

    //查看待审批兼职信息
    private static void examine(UserService userService){
        System.out.println("**************查看待审批兼职信息*************");
        List<Job> jobList = userService.look();
        if (jobList.size()==0){
            System.out.println("暂无待审批兼职信息！\n");
            return;
        }
        DY(jobList);
        System.out.println("------------------------------------------------------------------------------------------");
    }

    //处理待审批兼职信息
    private static void handle(UserService userService){
        System.out.println("**************处理待审批兼职信息*************");
        int did=TSUtility.did();
        int in=1;
        boolean b = userService.handle_did(did,in);
        if (!b) {
            System.out.println("你输入的待审批兼职信息不存在\n");
            return;
        }
        System.out.print("1.通过审核\t\t2.不通过审核\n请输入选择：");
        char c=TSUtility.readMenuSelection3();
        int status=2;
        if (c=='2')
            status=3;
        userService.handle(did,status);
        System.out.println("处理完成！\n");
    }

    //系统管理
    static void system_management(UserService userService, User user) {
        while (true) {
            View.system_managementView();
            char c = TSUtility.readMenuSelection2();
            switch (c) {
                case '1':
                    //删除用户（兼职人员或管理人员均可删）
                    userDel(userService, user.getACID());
                    break;
                case '2':
                    //添加用户（兼职人员或管理人员均可添加）
                    add_user(userService);
                    break;
                case '3':
                    //修改密码
                    change_password(userService,user.getACID());
                    break;
                case '4':
                    //查询所有用户信息
                    query_information(userService);
                    break;
                case '5':
                    //查询已结束职位
                    completed(userService);
                    break;
                case '6':
                    //查询逾期兼职信息
                    overdue(userService);
                    break;
                case '7':
                    TSUtility.loadSpecialEffects();
                    System.out.println("\t\t1.基本信息维护\n\t\t2.兼职信息投放\n\t\t3.系统管理\n\t\t4.退出登录\n\t\t5.退出系统");
                    System.out.print("请输入你的选择：");
                    return;
            }
        }
    }

    //删除用户
    private static void userDel(UserService userService, String acid) {
        System.out.println("++++++++++删除用户信息+++++++++++");
        System.out.println("\t提示：管理员可以删除普通用户和别的管理员");
        System.out.print("请输入你要删除用户的帐号或学号（教师编号）：");
        String id = sc.next();
        boolean flag = userService.name_t(id);
        if (!flag) {
            System.out.println("你输入的账号不存在！\n");
            return;
        }
        User user = userService.id(id);
        System.out.println("学号（教师编号）：" + user.getUid() + "，账户编号：" + user.getACID() + "，姓名：" + user.getName()
                + "，密码:" + user.getPassword() + "，\n年龄:" + user.getAge() + "，电话:" + user.getPhone() + "，所在院校：" + user.getDepartment()
                + "，注册日期：" + user.getDate());
        if (acid.equals(user.getACID())) {
            System.out.println("你确定注销你自己的账户吗？请输入（Y|N）：");
        } else {
            System.out.print("你是否确认删除该用户信息，请输入（Y|N）：");
        }
        char c = TSUtility.readConfirmSelection();
        TSUtility.loadSpecialEffects();
        if (c == 'Y' || c == 'y') {
            userService.acid_remove(user.getACID());
            if (acid.equals(user.getACID())) {
                System.out.println("账户注销成功！\n");
                System.exit(0);
            }
            System.out.println("用户信息删除成功！\n");
        } else {
            System.out.println("你选择了NO，你的账号未删除！\n");
        }
        TSUtility.readReturn();
    }

    //添加用户
    private static void add_user(UserService userService){
        View.add_userView();
        while (true) {
            System.out.print("请输入选择：");
            char c = TSUtility.readMenuSelection1();
            switch (c){
                case '1':
                    //录入在校人员信息
                    input_information(userService);
                    break;
                case '2':
                    //注册用户
                    register();
                    break;
                case '3':
                    return;
            }
        }
    }

    //管理员注册其他用户
    private static void register(){
        System.out.println("###########注册用户###########");
        System.out.println("1.兼职人员注册\n2.管理人员注册\n3.兼职信息发布人员注册");
        System.out.print("请输入选择：");
        char T = TSUtility.readMenuSelection1();
        Login.moonlightRegister(T);
        View.add_userView();
    }

    //修改密码
    private static void change_password(UserService userService,String acid){
        System.out.println("++++++++++修改密码+++++++++++");
        System.out.println("提示：以下信息为可不填，不填时信息未修改");
        System.out.print("请输入密码：");
        String password=sc.nextLine();
        if (password.equals("")){
            System.out.println("密码未修改！");
            View.system_managementView();
            return;
        }
        boolean flag = userService.password(acid, password);
        if (flag)
            System.out.println("密码修改成功！");
        else
            System.out.println("密码修改失败！");
        View.system_managementView();
    }

    //查询所有用户信息
    private static void query_information(UserService userService){
        System.out.println("++++++++++++查询所有用户信息++++++++++++");
        List<User> userList = userService.information();
        int i=0;
        System.out.println("序号\t学号（教师编号）\t编号（账号）\t姓名\t年龄\t性别\t电话\t所在院系\t注册日期\t\t信用等级");
        for (User user:userList){
            i++;
            System.out.println(i+"\t\t"+user.getUid()+"\t\t"+user.getACID()+"\t\t"+user.getName()+'\t'+user.getAge()+'\t'+user.getSex()+' '+user.getPhone()+' '+user.getDepartment()+' '+
                    user.getDate()+"\t"+user.getCredit_rating());
        }
        System.out.println("-------------------------------------------------------------------------------------------\n");
        View.system_managementView();
    }

    //录入人员信息
    private static void input_information(UserService userService){
        System.out.println("##########录入在校人员信息##########");
        System.out.println("录入在校人员信息，保证是校内人员，如果没有录入人员信息则用户不能注册");
        System.out.print("请输入学号或教师编号：");
        String id=sc.next();
        System.out.print("请输入姓名：");
        String name=sc.next();
        boolean flag = userService.uid_t(id);
        if (flag){
            System.out.println("该人员已是校内人员，请勿重复录入！");
            View.add_userView();
            return;
        }
        boolean flag1 = userService.add_personnel(id, name);
        if (flag1){
            System.out.println("在校人员信息录入成功！");
        }else {
            System.out.println("在校人员信息录入失败！");
        }
        View.add_userView();
    }

    //查询已完成的兼职信息
    private static void completed(UserService userService){
        System.out.println("++++++++++++查询已结束的兼职信息++++++++++++");
        List<Job> jobs = userService.completedG();
        if (jobs.size()==0){
            System.out.println("暂无已结束的工作！\n");
            return;
        }
        DY(jobs);
        System.out.println("---------------------------------------------------------------------------------------------");
    }

    //查询已逾期的工作
    private static void overdue(UserService userService){
        System.out.println("++++++++++++查询已逾期的兼职信息++++++++++++");
        List<Job> jobs = userService.overdue();
        if (jobs.size()==0){
            System.out.println("暂无已逾期的兼职信息！");
            return;
        }
        DY(jobs);
        System.out.println("---------------------------------------------------------------------------------------------");
    }
}
